package com.zhuhanpeng.cloud.api.control;

import com.alibaba.fastjson.JSONObject;
import com.zhenzi.sms.ZhenziSmsClient;
import com.zhuhanpeng.cloud.spring.control.BaseController;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;

@Controller
@RequestMapping("/api")
public class SendCodeController extends BaseController {
    private Logger logger = LogManager.getLogger(this.getClass());

    //短信平台相关参数
    //这个不用改
    private String apiUrl = "https://sms_developer.zhenzikj.com";
    //榛子云系统上获取
    private String appId = "112834";
    private String appSecret = "e07e9f2e-5e56-426c-86b9-bbd79c2c1916";
    @ResponseBody
    @RequestMapping("/sendCode")
    public String sendCode(@RequestParam("phone") String phone, HttpSession httpSession){
        //输出手机号
        logger.info(phone);
        try {

            //短信发送需要的参数是json类型
            JSONObject json = null;
            //随机6位生成验证码
            String code =String.valueOf(ThreadLocalRandom.current().nextInt(100000, 1000000));
            //将验证码通过榛子云接口发送至手机
            ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret);
            //参数类型
            Map<String, Object> params = new HashMap<String, Object>();
            //前台输入的手机号
            params.put("number", phone);
            //这个模板id对应的是榛子云个人中心的模板id
            params.put("templateId", 11162);
            //参数占位符,不同的模板有不同的参数个数 目前用的模板有两个参数
            String[] templateParams = new String[2];
            //第一个参数 随机生成的六位验证码
            templateParams[0] = code;
            //第二个参数 x分钟
            templateParams[1] = "5";
            //把参数占位符放在整体参数中
            params.put("templateParams", templateParams);
            //执行发送短信
            String result = client.send(params);
            System.out.println(result);
            json = JSONObject.parseObject(result);
            //发送短信失败
            if (json.getIntValue("code")!=0){
                return  failCodeJson("send.fail",101);
            }
            //将验证码存到session中,同时存入创建时间
            //以json存放，这里使用的是阿里的fastjson
            json = new JSONObject();
            json.put("phone",phone);
            json.put("phoneCode",code);
            json.put("createTime",System.currentTimeMillis());
            //将认证码存入SESSION
            httpSession.setAttribute("phoneCode",json);
            return sucessJson("send.success");
        } catch (Exception e) {
            e.printStackTrace();
            return failCodeJson("send.fail",102);
        }
    }

}